/*
 * @lc app=leetcode.cn id=50 lang=golang
 *
 * [50] Pow(x, n)
 */

// 2. 递归--
// @lc code=start
func myPow(x float64, n int) (ans float64) {
	if x == 0 {
		return 0
	}

	var pow func(n int) float64
	pow = func(n int) float64 {
		if n == 0 {
			return 1
		}

		temp := pow(n / 2)
		if n%2 == 0 {
			return temp * temp
		} else {
			return temp * temp * x
		}
	}

	ans = pow(n)
	if n > 0 {
		return ans
	} else {
		return 1 / ans
	}
}

// @lc code=end

// 1. 暴力递归--内存溢出
// @lc code=start
func myPow(x float64, n int) float64 {
	if x == 0 {
		return 0
	}

	if n == 0 {
		return 1
	}

	return x * myPow(x, n-1)
}

// @lc code=end

